import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM) #BCM或者BOARD模式
GPIO.setwarnings(False)  #屏蔽警告信息


class Button:
    def __init__(self, pin):
        self.pin = pin
        GPIO.setup(pin, GPIO.IN, GPIO.PUD_UP)
    
    def detect(self, f, **kargs):
        """检测是否有按键按下, 包含按键软件防抖"""
        while True:
            time.sleep(0.05)
            if GPIO.input(self.pin) == 1:  # 按下（该按键模块，当松开的时候是低电平，按下时高电平）
                time.sleep(0.1)  # 延时20ms
                if GPIO.input(self.pin) == 1:  # 再次判断是否在按下的状态(判断是否在稳定区间)
                    while GPIO.input(self.pin) == 1:  # 等待松手
                        pass   #占位行
                    #实现按键要做的事情
                    f(**kargs)

def main():
    btn = Button(18)
    btn.detect(lambda : print(f'Pressed'))


if __name__ == "__main__":
    main()
